iT邦幫忙

2021 iThome 鐵人賽

DAY 18
1

日誌紀錄是網站的一個非常重要的功能,不論是對外的使用者或是對內的管理,實際運營上一定都會遇到許許多多的問題,問題發生時我們會去查閱紀錄並尋找問題,但當我們的紀錄都是由伺服器預設的處理方式,想要查閱紀錄就宛如大海撈針,所以建置自己的日誌紀錄就是一個很好的解決方法。
Spring Boot 已經有默認配置了Java Util Loggin、Log4J、Log4J2、Logback 以及SLF4J 等,而本篇使用的是SLF4J。

SLF4J

SLF4J (Simple Loggin Facade For Java),作為一個日誌紀錄的框架,定義了統一的抽象介面,它的作者也是Log4J 的作者,他宣稱SLF4J 比Log4J 更有效率,而且比JCL (Apache Commons Logging) 簡單、穩定。
在傳統的Log4J 中,日誌等級分為六個,根據等級高低依序為TRACE、DEBUG、INFO、WARN、ERROR、FATAL 六個等級,FATAL 為最高等級,而SLF4J 認為ERROR 與FATAL 並沒有實質上的差別所以拿掉了。

實作

配置Logging 屬性

# 指定Log 檔案位置,不指定路徑則預設在當前專案下生成檔案
logging.file.path=/home/kaijun/Documents/iThomeIronManLog

# 設定Log 檔案名稱,預設為spring.log,使用該配置會覆蓋path 位置,直接在當前專案下生成檔案
logging.file.name=iThomeIronManLog.log

#  在控制檯輸出的日誌的格式
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n

# 指定檔案中日誌輸出的格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n

# 指定自定義 logger 物件日誌級別
logging.level.com.codewhite=trace

修改控制器層的登入功能

package com.example.iThomeIronMan.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.example.iThomeIronMan.model.Member;
import com.example.iThomeIronMan.model.MemberAccount;
import com.example.iThomeIronMan.service.MemberAccountService;

@Controller
public class LoginRegisterController {

	@Autowired
	private MemberAccountService memberAccountService;
	
	private static final Logger logger = LoggerFactory.getLogger(LoginRegisterController.class)

	@RequestMapping(value = "/login", method = {RequestMethod.POST})
	public String doLogin(
			@ModelAttribute MemberAccount memberAccount, 
			Model model) {
		
		Member result = memberAccountService.login(memberAccount);
		if(result == null) {
			logger.warn(memberAccount.getAccount() + "嘗試登入系統");
			return "redirect:login";
		}
		logger.info(result.getName() + "登入系統");
		return "redirect:information";
	}
	
	// 以下忽略

}

參考網站

SLF4J - 维基百科,自由的百科全书
SpringBoot從零入門4_日誌記錄及其配置詳解


上一篇
Day 17 - Spring Boot 例外處理
下一篇
Day 19 - Spring Boot & Cookie
系列文
誤打誤撞學了Spring Boot 還當了後端工程師30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言